1include <../std.scad>
  2
  3
  4module test__is_edge_array() {
  5    assert(_is_edge_array([[0,0,0,0],[0,0,0,0],[0,0,0,0]]));
  6    assert(_is_edge_array([[1,1,1,1],[1,1,1,1],[1,1,1,1]]));
  7    assert(!_is_edge_array([[1,1,1],[1,1,1],[1,1,1]]));
  8    assert(!_is_edge_array([[1,1,1,1,1],[1,1,1,1,1],[1,1,1,1,1]]));
  9    assert(!_is_edge_array([[1,1,1,1],[1,1,1,1]]));
 10    assert(!_is_edge_array([1,1,1,1]));
 11    assert(!_is_edge_array("foo"));
 12    assert(!_is_edge_array(42));
 13    assert(!_is_edge_array(true));
 14    assert(_is_edge_array(_edges(["X","Y"])));
 15}
 16test__is_edge_array();
 17
 18
 19module test__edge_set() {
 20    // Edge set pass through
 21    assert(_edge_set([[1,1,1,1],[0,1,0,1],[0,0,0,0]]) == [[1,1,1,1],[0,1,0,1],[0,0,0,0]]);
 22
 23    // Vectors towards corners
 24    assert(_edge_set([-1,-1,-1]) == [[1,0,0,0],[1,0,0,0],[1,0,0,0]]);
 25    assert(_edge_set([-1,-1, 1]) == [[0,0,1,0],[0,0,1,0],[1,0,0,0]]);
 26    assert(_edge_set([-1, 1,-1]) == [[0,1,0,0],[1,0,0,0],[0,0,1,0]]);
 27    assert(_edge_set([-1, 1, 1]) == [[0,0,0,1],[0,0,1,0],[0,0,1,0]]);
 28    assert(_edge_set([ 1,-1,-1]) == [[1,0,0,0],[0,1,0,0],[0,1,0,0]]);
 29    assert(_edge_set([ 1,-1, 1]) == [[0,0,1,0],[0,0,0,1],[0,1,0,0]]);
 30    assert(_edge_set([ 1, 1,-1]) == [[0,1,0,0],[0,1,0,0],[0,0,0,1]]);
 31    assert(_edge_set([ 1, 1, 1]) == [[0,0,0,1],[0,0,0,1],[0,0,0,1]]);
 32
 33    // Vectors towards edges
 34    assert(_edge_set([ 0,-1,-1]) == [[1,0,0,0],[0,0,0,0],[0,0,0,0]]);
 35    assert(_edge_set([ 0, 1,-1]) == [[0,1,0,0],[0,0,0,0],[0,0,0,0]]);
 36    assert(_edge_set([ 0,-1, 1]) == [[0,0,1,0],[0,0,0,0],[0,0,0,0]]);
 37    assert(_edge_set([ 0, 1, 1]) == [[0,0,0,1],[0,0,0,0],[0,0,0,0]]);
 38    assert(_edge_set([-1, 0,-1]) == [[0,0,0,0],[1,0,0,0],[0,0,0,0]]);
 39    assert(_edge_set([ 1, 0,-1]) == [[0,0,0,0],[0,1,0,0],[0,0,0,0]]);
 40    assert(_edge_set([-1, 0, 1]) == [[0,0,0,0],[0,0,1,0],[0,0,0,0]]);
 41    assert(_edge_set([ 1, 0, 1]) == [[0,0,0,0],[0,0,0,1],[0,0,0,0]]);
 42    assert(_edge_set([-1,-1, 0]) == [[0,0,0,0],[0,0,0,0],[1,0,0,0]]);
 43    assert(_edge_set([ 1,-1, 0]) == [[0,0,0,0],[0,0,0,0],[0,1,0,0]]);
 44    assert(_edge_set([-1, 1, 0]) == [[0,0,0,0],[0,0,0,0],[0,0,1,0]]);
 45    assert(_edge_set([ 1, 1, 0]) == [[0,0,0,0],[0,0,0,0],[0,0,0,1]]);
 46
 47    // Vectors towards faces
 48    assert(_edge_set([ 0, 0,-1]) == [[1,1,0,0],[1,1,0,0],[0,0,0,0]]);
 49    assert(_edge_set([ 0, 0, 1]) == [[0,0,1,1],[0,0,1,1],[0,0,0,0]]);
 50    assert(_edge_set([ 0,-1, 0]) == [[1,0,1,0],[0,0,0,0],[1,1,0,0]]);
 51    assert(_edge_set([ 0, 1, 0]) == [[0,1,0,1],[0,0,0,0],[0,0,1,1]]);
 52    assert(_edge_set([-1, 0, 0]) == [[0,0,0,0],[1,0,1,0],[1,0,1,0]]);
 53    assert(_edge_set([ 1, 0, 0]) == [[0,0,0,0],[0,1,0,1],[0,1,0,1]]);
 54
 55    // Named edge sets
 56    assert(_edge_set("X") == [[1,1,1,1],[0,0,0,0],[0,0,0,0]]);
 57    assert(_edge_set("Y") == [[0,0,0,0],[1,1,1,1],[0,0,0,0]]);
 58    assert(_edge_set("Z") == [[0,0,0,0],[0,0,0,0],[1,1,1,1]]);
 59    assert(_edge_set("NONE") == [[0,0,0,0],[0,0,0,0],[0,0,0,0]]);
 60    assert(_edge_set("ALL") == [[1,1,1,1],[1,1,1,1],[1,1,1,1]]);
 61}
 62test__edge_set();
 63
 64
 65module test__normalize_edges() {
 66    assert(_normalize_edges([[-2,-2,-2,-2],[-2,-2,-2,-2],[-2,-2,-2,-2]]) == [[0,0,0,0],[0,0,0,0],[0,0,0,0]]);
 67    assert(_normalize_edges([[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1]]) == [[0,0,0,0],[0,0,0,0],[0,0,0,0]]);
 68    assert(_normalize_edges([[0,0,0,0],[0,0,0,0],[0,0,0,0]]) == [[0,0,0,0],[0,0,0,0],[0,0,0,0]]);
 69    assert(_normalize_edges([[1,1,1,1],[1,1,1,1],[1,1,1,1]]) == [[1,1,1,1],[1,1,1,1],[1,1,1,1]]);
 70    assert(_normalize_edges([[2,2,2,2],[2,2,2,2],[2,2,2,2]]) == [[1,1,1,1],[1,1,1,1],[1,1,1,1]]);
 71}
 72test__normalize_edges();
 73
 74
 75module test__edges() {
 76    assert(_edges("X")==[[1,1,1,1],[0,0,0,0],[0,0,0,0]]);
 77    assert(_edges("Y")==[[0,0,0,0],[1,1,1,1],[0,0,0,0]]);
 78    assert(_edges("Z")==[[0,0,0,0],[0,0,0,0],[1,1,1,1]]);
 79    assert(_edges(["X"])==[[1,1,1,1],[0,0,0,0],[0,0,0,0]]);
 80    assert(_edges(["Y"])==[[0,0,0,0],[1,1,1,1],[0,0,0,0]]);
 81    assert(_edges(["Z"])==[[0,0,0,0],[0,0,0,0],[1,1,1,1]]);
 82    assert(_edges(["X","Y"])==[[1,1,1,1],[1,1,1,1],[0,0,0,0]]);
 83    assert(_edges(["X","Z"])==[[1,1,1,1],[0,0,0,0],[1,1,1,1]]);
 84    assert(_edges(["Y","Z"])==[[0,0,0,0],[1,1,1,1],[1,1,1,1]]);
 85    assert(_edges("ALL",except="X")==[[0,0,0,0],[1,1,1,1],[1,1,1,1]]);
 86    assert(_edges("ALL",except="Y")==[[1,1,1,1],[0,0,0,0],[1,1,1,1]]);
 87    assert(_edges("ALL",except="Z")==[[1,1,1,1],[1,1,1,1],[0,0,0,0]]);
 88    assert(_edges(["Y","Z"],except=[FRONT+RIGHT,FRONT+LEFT])==[[0,0,0,0],[1,1,1,1],[0,0,1,1]]);
 89}
 90test__edges();
 91
 92
 93module test__corner_edge_count() {
 94    edges = _edges([TOP,FRONT+RIGHT]);
 95    assert(_corner_edge_count(edges,TOP+FRONT+RIGHT) == 3);
 96    assert(_corner_edge_count(edges,TOP+FRONT+LEFT) == 2);
 97    assert(_corner_edge_count(edges,BOTTOM+FRONT+RIGHT) == 1);
 98    assert(_corner_edge_count(edges,BOTTOM+FRONT+LEFT) == 0);
 99}
100test__corner_edge_count();
101
102
103module test__corner_edges() {
104    edges = _edges([TOP,FRONT+RIGHT]);
105    assert_equal(_corner_edges(edges,TOP+FRONT+RIGHT), [1,1,1]);
106    assert_equal(_corner_edges(edges,TOP+FRONT+LEFT), [1,1,0]);
107    assert_equal(_corner_edges(edges,BOTTOM+FRONT+RIGHT), [0,0,1]);
108    assert_equal(_corner_edges(edges,BOTTOM+FRONT+LEFT), [0,0,0]);
109}
110test__corner_edges();
111
112
113module test__corners() {
114    assert_equal(_corners(BOT + FRONT + LEFT ), [1,0,0,0,0,0,0,0]);
115    assert_equal(_corners(BOT + FRONT + RIGHT), [0,1,0,0,0,0,0,0]);
116    assert_equal(_corners(BOT + BACK  + LEFT ), [0,0,1,0,0,0,0,0]);
117    assert_equal(_corners(BOT + BACK  + RIGHT), [0,0,0,1,0,0,0,0]);
118    assert_equal(_corners(TOP + FRONT + LEFT ), [0,0,0,0,1,0,0,0]);
119    assert_equal(_corners(TOP + FRONT + RIGHT), [0,0,0,0,0,1,0,0]);
120    assert_equal(_corners(TOP + BACK  + LEFT ), [0,0,0,0,0,0,1,0]);
121    assert_equal(_corners(TOP + BACK  + RIGHT), [0,0,0,0,0,0,0,1]);
122
123    assert_equal(_corners(BOT   + FRONT),  [1,1,0,0,0,0,0,0]);
124    assert_equal(_corners(BOT   + BACK ),  [0,0,1,1,0,0,0,0]);
125    assert_equal(_corners(TOP   + FRONT),  [0,0,0,0,1,1,0,0]);
126    assert_equal(_corners(TOP   + BACK ),  [0,0,0,0,0,0,1,1]);
127    assert_equal(_corners(BOT   + LEFT ),  [1,0,1,0,0,0,0,0]);
128    assert_equal(_corners(BOT   + RIGHT),  [0,1,0,1,0,0,0,0]);
129    assert_equal(_corners(TOP   + LEFT ),  [0,0,0,0,1,0,1,0]);
130    assert_equal(_corners(TOP   + RIGHT),  [0,0,0,0,0,1,0,1]);
131    assert_equal(_corners(FRONT + LEFT ),  [1,0,0,0,1,0,0,0]);
132    assert_equal(_corners(FRONT + RIGHT),  [0,1,0,0,0,1,0,0]);
133    assert_equal(_corners(BACK  + LEFT ),  [0,0,1,0,0,0,1,0]);
134    assert_equal(_corners(BACK  + RIGHT),  [0,0,0,1,0,0,0,1]);
135
136    assert_equal(_corners(LEFT),   [1,0,1,0,1,0,1,0]);
137    assert_equal(_corners(RIGHT),  [0,1,0,1,0,1,0,1]);
138    assert_equal(_corners(FRONT),  [1,1,0,0,1,1,0,0]);
139    assert_equal(_corners(BACK),   [0,0,1,1,0,0,1,1]);
140    assert_equal(_corners(BOT),    [1,1,1,1,0,0,0,0]);
141    assert_equal(_corners(TOP),    [0,0,0,0,1,1,1,1]);
142
143    assert_equal(_corners([BOT + FRONT + LEFT ]), [1,0,0,0,0,0,0,0]);
144    assert_equal(_corners([BOT + FRONT + RIGHT]), [0,1,0,0,0,0,0,0]);
145    assert_equal(_corners([BOT + BACK  + LEFT ]), [0,0,1,0,0,0,0,0]);
146    assert_equal(_corners([BOT + BACK  + RIGHT]), [0,0,0,1,0,0,0,0]);
147    assert_equal(_corners([TOP + FRONT + LEFT ]), [0,0,0,0,1,0,0,0]);
148    assert_equal(_corners([TOP + FRONT + RIGHT]), [0,0,0,0,0,1,0,0]);
149    assert_equal(_corners([TOP + BACK  + LEFT ]), [0,0,0,0,0,0,1,0]);
150    assert_equal(_corners([TOP + BACK  + RIGHT]), [0,0,0,0,0,0,0,1]);
151
152    assert_equal(_corners([BOT   + FRONT]),  [1,1,0,0,0,0,0,0]);
153    assert_equal(_corners([BOT   + BACK ]),  [0,0,1,1,0,0,0,0]);
154    assert_equal(_corners([TOP   + FRONT]),  [0,0,0,0,1,1,0,0]);
155    assert_equal(_corners([TOP   + BACK ]),  [0,0,0,0,0,0,1,1]);
156    assert_equal(_corners([BOT   + LEFT ]),  [1,0,1,0,0,0,0,0]);
157    assert_equal(_corners([BOT   + RIGHT]),  [0,1,0,1,0,0,0,0]);
158    assert_equal(_corners([TOP   + LEFT ]),  [0,0,0,0,1,0,1,0]);
159    assert_equal(_corners([TOP   + RIGHT]),  [0,0,0,0,0,1,0,1]);
160    assert_equal(_corners([FRONT + LEFT ]),  [1,0,0,0,1,0,0,0]);
161    assert_equal(_corners([FRONT + RIGHT]),  [0,1,0,0,0,1,0,0]);
162    assert_equal(_corners([BACK  + LEFT ]),  [0,0,1,0,0,0,1,0]);
163    assert_equal(_corners([BACK  + RIGHT]),  [0,0,0,1,0,0,0,1]);
164
165    assert_equal(_corners([LEFT]),  [1,0,1,0,1,0,1,0]);
166    assert_equal(_corners([RIGHT]), [0,1,0,1,0,1,0,1]);
167    assert_equal(_corners([FRONT]), [1,1,0,0,1,1,0,0]);
168    assert_equal(_corners([BACK]),  [0,0,1,1,0,0,1,1]);
169    assert_equal(_corners([BOT]),   [1,1,1,1,0,0,0,0]);
170    assert_equal(_corners([TOP]),   [0,0,0,0,1,1,1,1]);
171
172    assert_equal(_corners([TOP,FRONT+RIGHT]), [0,1,0,0,1,1,1,1]);
173}
174test__corners();
175
176
177module test__is_corner_array() {
178    edges = _edges([TOP,FRONT+RIGHT]);
179    corners = _corners([TOP,FRONT+RIGHT]);
180    assert(!_is_corner_array(undef));
181    assert(!_is_corner_array(true));
182    assert(!_is_corner_array(false));
183    assert(!_is_corner_array(INF));
184    assert(!_is_corner_array(-INF));
185    assert(!_is_corner_array(NAN));
186    assert(!_is_corner_array(-4));
187    assert(!_is_corner_array(0));
188    assert(!_is_corner_array(4));
189    assert(!_is_corner_array("foo"));
190    assert(!_is_corner_array([]));
191    assert(!_is_corner_array([4,5,6]));
192    assert(!_is_corner_array([2:3:9]));
193    assert(!_is_corner_array(edges));
194    assert(_is_corner_array(corners));
195}
196test__is_corner_array();
197
198
199module test__normalize_corners() {
200    assert_equal(_normalize_corners([-2,-2,-2,-2,-2,-2,-2,-2]), [0,0,0,0,0,0,0,0]);
201    assert_equal(_normalize_corners([-1,-1,-1,-1,-1,-1,-1,-1]), [0,0,0,0,0,0,0,0]);
202    assert_equal(_normalize_corners([0,0,0,0,0,0,0,0]), [0,0,0,0,0,0,0,0]);
203    assert_equal(_normalize_corners([1,1,1,1,1,1,1,1]), [1,1,1,1,1,1,1,1]);
204    assert_equal(_normalize_corners([2,2,2,2,2,2,2,2]), [1,1,1,1,1,1,1,1]);
205}
206test__normalize_corners();
207
208
209
210// vim: expandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap